#include <gtkmm.h>

class MyWindow : public Gtk::Window {
public:
    MyWindow() {
        set_title("GtkMenuBar Example");  // 设置窗口标题
        set_default_size(400, 200);  // 设置窗口默认大小

        // 创建主垂直盒子容器
        Gtk::Box* vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0));
        add(*vbox);

        // 创建菜单栏
        Gtk::MenuBar* menubar = Gtk::manage(new Gtk::MenuBar());
        vbox->pack_start(*menubar, Gtk::PACK_SHRINK);

        // 创建文件菜单
        Gtk::MenuItem* file_menu_item = Gtk::manage(new Gtk::MenuItem("_File", true));
        menubar->append(*file_menu_item);

        // 创建文件菜单的子菜单
        Gtk::Menu* file_menu = Gtk::manage(new Gtk::Menu());
        file_menu_item->set_submenu(*file_menu);

        // 创建新建菜单项
        Gtk::MenuItem* new_menu_item = Gtk::manage(new Gtk::MenuItem("_New", true));
        new_menu_item->signal_activate().connect(sigc::mem_fun(*this, &MyWindow::on_menu_file_new));
        file_menu->append(*new_menu_item);

        // 创建打开菜单项
        Gtk::MenuItem* open_menu_item = Gtk::manage(new Gtk::MenuItem("_Open", true));
        open_menu_item->signal_activate().connect(sigc::mem_fun(*this, &MyWindow::on_menu_file_open));
        file_menu->append(*open_menu_item);

        // 创建分隔符菜单项
        Gtk::SeparatorMenuItem* sep = Gtk::manage(new Gtk::SeparatorMenuItem());
        file_menu->append(*sep);

        // 创建退出菜单项
        Gtk::MenuItem* quit_menu_item = Gtk::manage(new Gtk::MenuItem("_Quit", true));
        quit_menu_item->signal_activate().connect(sigc::mem_fun(*this, &MyWindow::on_menu_file_quit));
        file_menu->append(*quit_menu_item);

        // 创建编辑菜单
        Gtk::MenuItem* edit_menu_item = Gtk::manage(new Gtk::MenuItem("_Edit", true));
        menubar->append(*edit_menu_item);

        // 创建编辑菜单的子菜单
        Gtk::Menu* edit_menu = Gtk::manage(new Gtk::Menu());
        edit_menu_item->set_submenu(*edit_menu);

        // 创建剪切菜单项
        Gtk::MenuItem* cut_menu_item = Gtk::manage(new Gtk::MenuItem("Cu_t", true));
        cut_menu_item->signal_activate().connect(sigc::mem_fun(*this, &MyWindow::on_menu_edit_cut));
        edit_menu->append(*cut_menu_item);

        // 创建复制菜单项
        Gtk::MenuItem* copy_menu_item = Gtk::manage(new Gtk::MenuItem("_Copy", true));
        copy_menu_item->signal_activate().connect(sigc::mem_fun(*this, &MyWindow::on_menu_edit_copy));
        edit_menu->append(*copy_menu_item);

        // 创建粘贴菜单项
        Gtk::MenuItem* paste_menu_item = Gtk::manage(new Gtk::MenuItem("_Paste", true));
        paste_menu_item->signal_activate().connect(sigc::mem_fun(*this, &MyWindow::on_menu_edit_paste));
        edit_menu->append(*paste_menu_item);

        // 创建标签
        label = Gtk::manage(new Gtk::Label("Select a menu item"));
        vbox->pack_start(*label);

        show_all_children();
    }

    virtual ~MyWindow() {}

protected:
    // 文件菜单项的回调函数
    void on_menu_file_new() {
        label->set_text("New File selected");
    }

    void on_menu_file_open() {
        label->set_text("Open File selected");
    }

    void on_menu_file_quit() {
        hide();  // 退出程序
    }

    // 编辑菜单项的回调函数
    void on_menu_edit_cut() {
        label->set_text("Cut selected");
    }

    void on_menu_edit_copy() {
        label->set_text("Copy selected");
    }

    void on_menu_edit_paste() {
        label->set_text("Paste selected");
    }

    Gtk::Label* label;  // 标签控件指针
};

int main(int argc, char *argv[]) {
    auto app = Gtk::Application::create(argc, argv, "com.example.GtkMenuBarExample");  // 创建 GTK 应用程序实例

    MyWindow window;  // 创建主窗口实例

    return app->run(window);  // 运行应用程序
}

